package safe;
import java.util.Scanner;

/**
 * 内存可见性:一个线程频繁读,一个线程写
 * 解决:volatile
 * Java给这种情况专门取了一个名字:JMM
 * 其中把CPU叫做工作内存, 内存叫做主内存
 */

/**
 * 但是CPU从内存中读数据太慢了,寄存器空间太紧张
 * 所以CPU另外搞了一块空间,就叫做缓存
 * 缓存有三级缓存,最常用的放到L1, 次用的放到L2, 用的最少的放到L3
 */

public class Demo2 {
    private volatile static int isQuit = 0;

    public static void main(String[] args) {
        //这里不加sleep,会读的很快,导致编译器优化,让isQuit去寄存器读,这样用户输入的就没用了
        Thread t = new Thread(() -> {
            while (isQuit == 0) {

            }
            System.out.println("循环结束! t 线程退出!");
        });
        t.start();

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个 isQuit 的值: ");
        isQuit = scanner.nextInt();
        System.out.println("main 线程执行完毕!");
    }
}
